package lzupdater.log;

import java.io.PrintStream;

//LZRosterUpdater, a java client to update LZRoster
//Copyright (C) 2008 Fraskor from Krasus (e-mail: fraskor@gmail.com)
//
//This file is part of LZRosterUpdater.
//
//LZRosterUpdater is free software: you can redistribute it and/or modify
//it under the terms of the GNU General Public License as published by
//the Free Software Foundation, either version 3 of the License, or
//(at your option) any later version.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU General Public License for more details.
//
//You should have received a copy of the GNU General Public License
//along with this program.  If not, see <http://www.gnu.org/licenses/>.

/**
 * 
 * @author Fraskor
 */
public abstract class PrintStreamLogger implements LoggerListener {

	private final PrintStream out;
	private final PrintStream err;
	private LoggerLevel level;

	public PrintStreamLogger(PrintStream stream) {
		this(stream, stream, null);
	}

	public PrintStreamLogger(PrintStream stream, LoggerLevel level) {
		this(stream, stream, level);
	}

	public PrintStreamLogger(PrintStream out, PrintStream err) {
		this(out, err, null);
	}

	public PrintStreamLogger(PrintStream out, PrintStream err, LoggerLevel level) {
		if (out == null && err == null) {
			out = System.out;
			err = System.err;
		} else if (err == null) {
			err = out;
		} else if (out == null) {
			out = err;
		}
		this.out = out;
		this.err = err;
		this.level = (level == null) ? LoggerLevel.DEBUG : level;
	}

	public void clear() {
	}

	public void displayMsg(String message, LoggerLevel level) {
		switch (level) {
		case DEBUG:
		case INFO:
			out.println(message);
			break;
		case ERROR:
		case WARNING:
			err.println(message);
			break;
		default:
			out.println(message);
			break;
		}
	}

	public LoggerLevel getLoggerLevel() {
		return level;
	}
}
